using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Decisions.HL7.Message;
using DecisionsFramework;

namespace Decisions.HL7.Message
{
    public class SignatureCodeAttribute:RuleAttribute
    {
        private Dictionary<HL7Version, string[]> validVersionCodes = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, string[]> validVersionDescriptions = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, HL7TableType> tableVersionTypes = new Dictionary<HL7Version, HL7TableType>();

        public SignatureCodeAttribute()
        {
            // init the values for table version types
						tableVersionTypes[HL7Version.v25] = HL7TableType.User;
						tableVersionTypes[HL7Version.v251] = HL7TableType.User;
						tableVersionTypes[HL7Version.v26] = HL7TableType.User;
						tableVersionTypes[HL7Version.v27] = HL7TableType.User;
			
            
			// init the values for version codes
						validVersionCodes[HL7Version.v25] = new string[]{"C","S","M","P"};
						validVersionCodes[HL7Version.v251] = new string[]{"C","S","M","P"};
						validVersionCodes[HL7Version.v26] = new string[]{"C","S","M","P"};
						validVersionCodes[HL7Version.v27] = new string[]{"C","S","M","P"};
			
			// init the values for version descriptions
						validVersionDescriptions[HL7Version.v25] = new string[]{"Signed CMS-1500 claim form on file, e.g. authorization for release of any medical or other information necessary to process this claim and assignment of benefits.","Signed authorization for release of any medical or other information necessary to process this claim on file.","Signed authorization for assignment of benefits on file.","Signature generated by provider because the patient was not physically present for services."};
						validVersionDescriptions[HL7Version.v251] = new string[]{"Signed CMS-1500 claim form on file, e.g. authorization for release of any medical or other information necessary to process this claim and assignment of benefits.","Signed authorization for release of any medical or other information necessary to process this claim on file.","Signed authorization for assignment of benefits on file.","Signature generated by provider because the patient was not physically present for services."};
						validVersionDescriptions[HL7Version.v26] = new string[]{"Signed CMS-1500 claim form on file, e.g., authorization for release of any medical or other information necessary to process this claim and assignment of benefits.","Signed authorization for release of any medical or other information necessary to process this claim on file.","Signed authorization for assignment of benefits on file.","Signature generated by provider because the patient was not physically present for services."};
						validVersionDescriptions[HL7Version.v27] = new string[]{"Signed CMS-1500 claim form on file, e.g., authorization for release of any medical or other information necessary to process this claim and assignment of benefits.","Signed authorization for release of any medical or other information necessary to process this claim on file.","Signed authorization for assignment of benefits on file.","Signature generated by provider because the patient was not physically present for services."};
			            

        }

        
        public override ValidationIssue[] RunRule(string name, object owningObject, object value)
        {
            //todo: check if the value is valid in the current version
            //if the value is not valid in the current version, add it as a validation issue


            return new ValidationIssue[0];
        }
    }
}
